import dataclasses

from llama_index.core.agent.workflow import  FunctionAgent
from llama_index.core.vector_stores import SimpleVectorStore
from llama_index.core.schema import  TextNode
from llama_index.core import Settings, SimpleKeywordTableIndex, SummaryIndex, get_response_synthesizer
from llama_index.embeddings.zhipuai import ZhipuAIEmbedding
from llama_index.core.graph_stores import SimplePropertyGraphStore
from llama_index.core.schema import Document
from pydantic import BaseModel

embed_model = ZhipuAIEmbedding(
    model="embedding-2",
    api_key="f387f5e4837d4e4bba6d267682a957c9.PmPiTw8qVlsI2Oi5"
    # With the `embedding-3` class
    # of models, you can specify the size
    # of the embeddings you want returned.
    # dimensions=1024
)
Settings.embed_model=embed_model

from llama_index.llms.deepseek import DeepSeek

llm = DeepSeek(model="deepseek-chat", api_key="sk-605e60a1301040759a821b6b677556fb")
Settings.llm = llm

from llama_index.core.tools import QueryPlanTool, QueryEngineTool

text="""2022年6月14日，江苏南京大报恩塔与“超级月亮”相映成景。新华社发（苏阳 摄）　
　今年农历八月的这次满月，也算是一次“超级月亮”。月球的公转轨道是椭圆形的，地月平均距离约是38万千米，离得最远的时候能达到40万千米，近的时候只有35万多千米。如果月球位于近地点前后又恰逢满月，就是所谓的“超级月亮”。
这次的中秋节和之后的农历八月十六晚上，月球距离我们大约是36万千米。虽然并非全年最大满月，但也算是“排进前三”的“超级月亮”了。"""
node=TextNode(text=text)
keyword_index = SimpleKeywordTableIndex(
    [node],
    show_progress=True,
)
query_engine=keyword_index.as_query_engine()

query1_tool=QueryEngineTool.from_defaults(query_engine,description="关于超级月亮的信息")


text001="""据新京报世面消息，10月4日，瑞典“环保少女”格蕾塔·通贝里被以军扣押后被曝遭残酷虐待。

10月1日，以色列海军拦截了向加沙运送人道主义物资的“全球坚韧船队”的42艘船只，扣押船队470多名活动人士。

10月4日，137名被扣押的活动人士被遣返回土耳其，格蕾塔仍被拘留。一名探访过格蕾塔的瑞典外交官员透露，格蕾塔被关在一个长满床虱的牢房里，出现脱水现象，水和食物摄入量都不足，身上长皮疹。

此前，以色列外交部曾称有关被拘留者遭受虐待的报道是“彻头彻尾的谎言”。

此前，9月1日，据环球网，外媒消息称，当地时间8月31日，瑞典“环保少女”格蕾塔·通贝里与同伴从西班牙巴塞罗那启航再次前往加沙。

报道称，通贝里所在的是一支有着数十艘船只参与的救援船队，
船上载有欧洲各地民众筹集的食品等人道主义救援物资。船队的目标是突破以色列在海上建立的封锁线，将物资运抵加沙地区。"""
node001=TextNode(text=text001)
keyword_index001 = SimpleKeywordTableIndex(
    [node001],
    show_progress=True,
)
query_engine=keyword_index001.as_query_engine()

query2_tool=QueryEngineTool.from_defaults(query_engine,description="关于环保少女的信息")


# 执行计划
plan_tool = QueryPlanTool.from_defaults(query_engine_tools=[query1_tool, query2_tool],description_prefix='''查询环保少女的信息''')


async def main():
    fa = FunctionAgent(tools=[plan_tool])
    name= await fa.run("使用工具，查询环保少女的信息")
    print(name)

import  asyncio

if __name__ == '__main__':

    asyncio.run(main())


print('okkk')

